PackageManager分析(1)通过反射获取package size

通过反射获取package size

源码地址

添加权限

1
android.permission.GET_PACKAGE_SIZE

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void getPackageInfo(Context context, String pkg) {
PackageManager pm = context.getPackageManager();
try {
Method method_getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
method_getPackageSizeInfo.invoke(pm, pkg, new IPackageStatsObserver.Stub() {
@Override
public IBinder asBinder() {
log.d("asBinder");
return super.asBinder();
}
@Override
public void onGetStatsCompleted(PackageStats packageStats, boolean b) throws RemoteException {
final StringBuilder sb = new StringBuilder("onGetStatsCompleted\n");
sb.append("packageName:").append(packageStats.packageName).append("\n");
sb.append("cacheSize:").append(packageStats.cacheSize).append("\n");
sb.append("dataSize:").append(packageStats.dataSize).append("\n");
sb.append("externalDataSize:").append(packageStats.externalDataSize).append("\n");
log.i(sb.toString());
mHandler.post(new Runnable() {
@Override
public void run() {
txt_content.setText(sb);
}
});
}
});
} catch (Exception e) {
e.printStackTrace();
}
}